변수
NOTE
셸의 명령 치환
$(...)과 변수 참조$변수/${변수}정리.
NOTE
원문을 AI가 검토·보강함(사실 확인 권장).
📌 개념
$(명령): 명령 치환(command substitution) — 괄호 안 명령의 실행 결과(표준출력)를 문자열로 치환한다. 백틱`명령`과 동일하나 중첩이 쉬워 권장된다.$변수/${변수}: 변수 참조 — 저장된 값을 호출한다. 중괄호는 경계를 명확히 할 때 사용(${VAR}_suffix).
💻 예시
YD="$(date -d yesterday +%Y%m%d)" # 어제 날짜를 YYYYMMDD 로
# yesterday : 어제 / +날짜포맷
echo "$YD" # 변수 값 호출 (따옴표로 공백/분할 방지)
echo "${YD}_bak" # 중괄호로 변수 경계 지정참고 표기
| 표기 | 의미 |
|---|---|
$(cmd) | 명령 실행 결과로 치환 |
$((식)) | 산술 연산 결과 (예: $((1+2)) → 3) |
$VAR, ${VAR} | 변수 값 참조 |
"$VAR" | 공백/글로빙 방지를 위해 큰따옴표 권장 |
인용 유무에 따른 개행(newline) 보존 차이
$(...) 명령 치환 결과를 변수에 담은 뒤 다시 참조할 때, 따옴표로 감싸는지 여부에 따라 결과가 달라진다.
result=$(cat multi_line_file)
echo $result # 인용 없음 → word splitting으로 공백/개행이 모두 스페이스로 붙어서 한 줄로 출력됨
echo "$result" # 큰따옴표로 인용 → 원본의 개행(줄바꿈)이 그대로 보존되어 출력됨$변수(인용 없이 사용) : 셸이 word splitting을 적용해 공백류 문자(스페이스/탭/개행)를 기준으로 단어를 분리한 뒤 다시 이어붙이므로, 여러 줄 값이 한 줄로 뭉쳐서 보임"$변수"(큰따옴표로 인용) : word splitting이 일어나지 않아 원본 값(개행 포함)이 그대로 유지됨- 여러 줄 파일을 읽어 라인 단위로 비교/파싱해야 하는 스크립트에서 이 차이를 놓치면, 인용을 빼먹었을 때 값이 한 줄로 뭉개져 파싱 로직이 조용히 실패할 수 있다.